package MainFace;

import Javabean.Staff;
import Javabean.User;
import Tool.*;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;

public class MainJframe extends JFrame implements ActionListener {
    //获取数据库连接
    String url = "jdbc:mysql:///staffsystem?userSSL=false";
    String username = "root";
    String password = "123456";
    Connection conn = DriverManager.getConnection(url,username,password);

    //创建排序计数对象
    int num = 0;

    //创建工资总额和平均工资对象
    double SalarySum = 0;
    double SalaryAvg = 0;


    //创建集合
    ArrayList<User> users = new ArrayList<User>();
    ArrayList<Staff> staffs = new ArrayList<Staff>();

    //组件
    //菜单
    //选项条目
    JMenuItem chaJmi = new JMenuItem("查看管理员");
    JMenuItem addJmi = new JMenuItem("添加管理员");
    JMenuItem xiugaiJmi = new JMenuItem("修改密码");
    JMenuItem deleteJmi = new JMenuItem("删除管理员");

    JMenuItem zJmi = new JMenuItem("添加职工信息");
    JMenuItem sJmi = new JMenuItem("删除职工信息");
    JMenuItem IDsearchmi = new JMenuItem("ID查询");
    JMenuItem same = new JMenuItem("工资级别查询");
    JMenuItem gJmi = new JMenuItem("修改职工信息");

    JMenuItem aboutmi = new JMenuItem("小组成员");

    //面板
    //设置功能组件
    JLabel SalarySumjlb = new JLabel("职工工资总额:" + "" + SalarySum + "");
    JLabel SalaryAvgjlb = new JLabel("平均工资:" + "" + SalaryAvg + "");

    JTextField IdJtf = new JTextField();
    JTextField LevelJtf = new JTextField();

    JButton SearchlevelBtn = new JButton("查找");
    JButton SearchidBtn = new JButton("查找");
    JButton AddBtn = new JButton("新增");
    JButton SortBtn = new JButton("排序");
    JButton RBtn = new JButton("刷新");

    //表格
    //设置表头
    String[] columnNames = { "ID","姓名", "性别", "出生日期", "年龄", "婚姻状态", "家庭住址", "职称", "工资级别","工资"};
    //创建表格对象
    JTable table = new JTable();


    public MainJframe() throws SQLException {

        //获取数据库数据
        //刷新数据库可能存在staff的id错误
        try {
            MySQL_Refresh_Staffidmirro.refreshStaffid(conn);
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }

        //给对象初始赋值
        MySQL_ArraylistCopy.arrayListcopy(conn,users,"user");
        MySQL_ArraylistCopy.arrayListcopy(conn,staffs,"staff");

        SalarySum = Init_SalaryRefresh.salaryRefresh(staffs);
        SalaryAvg = SalarySum/staffs.size();


        //1.界面初始化
        InitJframe();

        //2.初始化菜单
        InitJmenu();

        //3.初始化内容
        Initcontent();

        //4.组件监听实现

        //5.显示界面
        this.setVisible(true);

    }


    //4.组件监听实现
    @Override
    public void actionPerformed(ActionEvent e) {
        Object Source = e.getSource();

        //菜单
        //用户管理
        if(Source == chaJmi){

            new Function_User_search(users);

        }//查看管理员
        else if(Source == addJmi){

            new Function_User_Add(conn,users);

        }//添加管理员
        else if(Source == xiugaiJmi){

            new Function_User_Update(conn,users);

        }//修改密码
        else if(Source == deleteJmi){

            new Function_User_Delete(conn,users);

        }//删除管理员
        //功能
        else if(Source == zJmi){

            new Function_Staff_Add(conn,staffs);


        }//添加职工信息
        else if(Source == sJmi){

            new Function_Staff_Delete(conn,staffs);

        }//删除职工信息
        else if(Source == IDsearchmi){

            new Function_Staff_Search_ID(conn,table,columnNames);

        }//ID查询
        else if(Source == same){

            new Function_Staff_Search_Leaver(conn,table,columnNames);

        }//工资级别查询
        else if(Source == gJmi){

            new Function_Staff_Update(conn,staffs);

        }//修改职工信息
        //关于我们
        else if(Source == aboutmi){

            new About_Partner();

        }//关于我们

        //面板
        //按钮
        else if(Source == SearchidBtn){

            try {
                //获取输入数据
                String id = IdJtf.getText();

                //创建查找集合
                ArrayList<Staff> searchstaff = new ArrayList<>();
                //在数据库中查找
                MySQL_StaffSearch.staffIdSearch(conn,searchstaff,id);
                //更新表格数据
                String[][] tableValues = new String[searchstaff.size()][columnNames.length];
                tableValues = Init_Staff_TableRefresh.stafftableRefresh(searchstaff);
                TableModel dataModel = new DefaultTableModel(tableValues, columnNames);
                table.setModel(dataModel);

            } catch (Exception ex) {

                throw new RuntimeException(ex);

            }

        }//ID查找
        else if(Source == SearchlevelBtn){

            try {
                //获取输入数据
                String level = LevelJtf.getText();

                //创建查找集合
                ArrayList<Staff> searchstaff = new ArrayList<>();
                //在数据库中查找
                MySQL_StaffSearch.staffLevelSearch(conn,searchstaff,level);
                //更新表格数据
                String[][] tableValues = new String[searchstaff.size()][columnNames.length];
                tableValues = Init_Staff_TableRefresh.stafftableRefresh(searchstaff);
                TableModel dataModel = new DefaultTableModel(tableValues, columnNames);
                table.setModel(dataModel);

            } catch (Exception ex) {

                throw new RuntimeException(ex);

            }

        }//Level查找
        else if(Source == AddBtn){

            new Function_Staff_Add(conn,staffs);

        }//新增
        else if(Source == SortBtn){


            try {
                //创建查找集合
                ArrayList<Staff> searchstaff = new ArrayList<>();
                //在数据库中查找
                MySQL_StaffSearch.staffPXSearch(conn,searchstaff,num % 3);
                //更新表格数据
                String[][] tableValues = new String[searchstaff.size()][columnNames.length];
                tableValues = Init_Staff_TableRefresh.stafftableRefresh(searchstaff);
                TableModel dataModel = new DefaultTableModel(tableValues, columnNames);
                table.setModel(dataModel);

            } catch (Exception ex) {

                throw new RuntimeException(ex);

            }

            num++;

        }//排序
        else if(Source == RBtn){
            //刷新数据库可能存在staff的id错误
            try {
                MySQL_Refresh_Staffidmirro.refreshStaffid(conn);
            } catch (SQLException ex) {
                throw new RuntimeException(ex);
            }

            //获取数据库数据
            String[][] tableValues  = Init_Staff_TableRefresh.stafftableRefresh(staffs);

            //更新表格数据
            TableModel dataModel = new DefaultTableModel(tableValues, columnNames);
            table.setModel(dataModel);

            //更新工资总额和平均工资数据
            SalarySum = Init_SalaryRefresh.salaryRefresh(staffs);
            SalaryAvg = SalarySum/staffs.size();
            SalarySumjlb.setText("职工工资总额:" + "" + SalarySum + "");
            SalaryAvgjlb.setText("平均工资:" + "" + SalaryAvg + "");

        }//刷新

    }


    //3.初始化内容
    private void Initcontent() {
        //设置表格
        String[][] tableValues = Init_Staff_TableRefresh.stafftableRefresh(staffs);
        table = new JTable(tableValues,columnNames);

        //设置面板
        Panel panel1 = new Panel();
        //将表格添加到面板
        JScrollPane panel2 = new JScrollPane(table);

        panel1.setLayout(null);

        //设置面板大小与位置
        panel1.setBounds(0,0,1400,60);
        panel2.setBounds(0, 60, 1400, 740);

        //设置文本
        JLabel IdLabel = new JLabel("ID");
        JLabel LevelLabel = new JLabel("工资级别");
        SalarySumjlb.setText("职工工资总额:" + "" + SalarySum + "");
        SalaryAvgjlb.setText("平均工资:" + "" + SalaryAvg + "");


        SalarySumjlb.setBounds(550,15,138,30);
        SalaryAvgjlb.setBounds(700,15,100,30);
        IdLabel.setBounds(75,15,30,30);
        LevelLabel.setBounds(243,15,60,30);


        //设置输入框、按钮
        IdJtf.setBounds(100,20,50,25);
        LevelJtf.setBounds(303,20,50,25);

        SearchidBtn.setBounds(165,17,70,30);
        SearchlevelBtn.setBounds(370,17,70,30);
        SortBtn.setBounds(1100,15,70,30);
        AddBtn.setBounds(1200,15,70,30);
        RBtn.setBounds(1300,15,70,30);

        //添加监听
        SearchidBtn.addActionListener(this);
        SearchlevelBtn.addActionListener(this);
        AddBtn.addActionListener(this);
        SortBtn.addActionListener(this);
        RBtn.addActionListener(this);

        //将组件添加到面板
        panel1.add(IdLabel);
        panel1.add(LevelLabel);
        panel1.add(SalarySumjlb);
        panel1.add(SalaryAvgjlb);

        panel1.add(IdJtf);
        panel1.add(LevelJtf);

        panel1.add(SearchidBtn);
        panel1.add(SearchlevelBtn);
        panel1.add(AddBtn);
        panel1.add(SortBtn);
        panel1.add(RBtn);


        //将面板添加到容器
        this.getContentPane().add(panel1);
        this.getContentPane().add(panel2);



    }


    //2.初始化菜单
    private void InitJmenu() {
        //建立菜单
        JMenuBar jmenubar = new JMenuBar();

        //菜单选项
        JMenu UserJmenu = new JMenu("用户管理");
        JMenu functionJmenu = new JMenu("功能");
        JMenu aboutJmenu = new JMenu("关于我们");
        JMenu cJmiJmenu = new JMenu("查询职工信息");

        //添加菜单
        jmenubar.add(UserJmenu);
        jmenubar.add(functionJmenu);
        jmenubar.add(aboutJmenu);

        UserJmenu.add(chaJmi);
        UserJmenu.add(addJmi);
        UserJmenu.add(xiugaiJmi);
        UserJmenu.add(deleteJmi);

        functionJmenu.add(zJmi);
        functionJmenu.add(sJmi);
        functionJmenu.add(cJmiJmenu);
        functionJmenu.add(gJmi);

        aboutJmenu.add(aboutmi);

        cJmiJmenu.add(IDsearchmi);
        cJmiJmenu.add(same);

        //添加监听
        chaJmi.addActionListener(this);
        addJmi.addActionListener(this);
        xiugaiJmi.addActionListener(this);
        deleteJmi.addActionListener(this);

        zJmi.addActionListener(this);
        sJmi.addActionListener(this);
        IDsearchmi.addActionListener(this);
        same.addActionListener(this);
        gJmi.addActionListener(this);

        aboutmi.addActionListener(this);

        //在Jframe中设置菜单
        this.setJMenuBar(jmenubar);
    }


    //1.界面初始化
    private void InitJframe() {
        //设置界面大小
        this.setSize(1400,800);

        //设置界面标题
        this.setTitle("院职工工资管理系统-主界面");

        //取消界面居中
        this.setLocationRelativeTo(null);

        //设置界面置顶
        this.setAlwaysOnTop(true);

        //设置界面关闭模式
        this.setDefaultCloseOperation(3);

        //取消容器默认布局
        this.setLayout(null);
    }
}
